﻿using RTW.DAL;
using RTW.OA.App_Code;
using RTW.OA.Models;
using RTW.Utils.Ioc;
using RTW.Utils.Utils;
using System.Collections.Generic;
using System.Linq;

namespace RTW.OA.Servers
{
    public class MenuServers : IAutoInject
    {
        private readonly IRepository<sys_menu> Sys_MenuRepository;

        public MenuServers()
        {
            Sys_MenuRepository = new DapperRepository<sys_menu>();
        }

        public string InitMenu()
        {
#if DEBUG
            //测试环境
            SessionUtil.SetSessionValue("QuanXian", "|126||||||||||||||||001||001A||001D||001E||||||||||002||002A||002M||002D||002E||||||||003||003A||003M||003D||003E||||||||098||098D||098E||||||||||||127||||||||||||||||092||092N||092A||092D||092E||||||||093||093A||093M||093D||093E||||||||094||094D||094E||||||||||||095||095A||095M||095D||095E||||||||004||004A||004M||004D||004E||||||||005||005A||005M||005D||005E||||||||097||097A||097M||097D||097E||||||||006||006A||006M||006D||006E||||||||007||007A||007M||007D||007E||||||||008||008A||008M||008D||008E||||||||009||009E||||||||||||||010||010A||010M||010D||010E||||||||011||011M||||||||||||||012||012M||||||||||||||096||096M||||||||||||||013||013A||013M||013D||013E||||||||014||||||||||||||||015||015D||015E||||||||||||016||016M||016E||||||||||||017||017M||017E||||||||||||018||018E||||||||||||||019||019M||019D||019E||||||||||020||020D||020E||||||||||||021||021M||||||||||||||022||022N||022A||022M||022D||022E||||||023||023N||023A||023M||023D||023E||||||024||024A||024M||024D||024E||||||||025||025A||025M||025D||025E||||||||026||026A||026M||026D||026E||||||||027||027D||027E||||||||||||028||028D||028E||||||||||||109||109A||109M||109D||109E||||||||110||110E||||||||||||||111||111A||111M||111D||111E||||||||112||112E||||||||||||||132||132N||132E||||||||||||133||133N||133A||133M||133D||133E||||||134||134D||134E||||||||||||135||135D||135E||||||||||||136||136D||136E||||||||||||137||137D||137E||||||||||||138||138D||138E||||||||||||139||139D||139E||||||||||||101||101E||||||||||||||102||102A||102D||102E||||||||||103||103A||103M||103D||103E||||||||104||104A||104M||104D||104E||||||||029||029N||029A||029M||029D||029E||||||030||030N||030A||030M||030D||030E||||||031||031N||031A||031M||031D||031E||||||032||032N||032A||032M||032D||032E||||||033||033N||033A||033M||033D||033E||||||034||034N||034A||034M||034D||034E||||||035||035N||035A||035M||035D||035E||||||036||036N||036A||036M||036D||036E||||||037||037D||037E||||||||||||038||038M||038D||038E||||||||||090||090A||090M||090D||090E||||||||039||039A||039M||039D||039E||||||||040||040A||040M||040D||040E||||||||125||125A||125M||125D||125E||||||||041||041A||041M||041D||041E||||||||042||042A||042M||042D||042E||||||||043||043A||043M||043D||043E||||||||062||062E||||||||||||||063||063A||063M||063D||063E||||||||064||064D||064E||||||||||||065||065E||||||||||||||066||066A||066M||066D||066E||||||||068||068A||068M||068D||068E||||||||069||069A||069M||069D||069E||||||||070||070A||070M||070D||070E||||||||071||071A||071M||071D||071E||||||||072||072A||072M||072D||072E||||||||073||073A||073M||073D||073E||||||||074||074A||074M||074D||074E||||||||120||120A||120M||120D||120E||||||||121||121A||121M||121D||121E||||||||122||122A||122M||122D||122E||||||||123||123A||123M||123D||123E||||||||124||124M||124D||124E||||||||||044||044A||044M||044D||044E||||||||045||045N||045A||045M||045D||045E||||||046||046A||046D||046E||||||||||047||047N||047D||047E||||||||||128||128A||128M||128D||128E||||||||048||048A||048M||048D||048E||||||||049||049A||049M||049D||049E||||||||050||050M||050E||||||||||||A080||||||||HY001||HY001A||HY001M||HY001D||HY001E||||||||HY002||HY002A||HY002M||HY002D||HY002E||||||||C001||C001A||C001M||C001D||C001E||||||||C002||C002A||C002M||C002D||C002E||||||||C003||C003A||C003M||C003D||C003E||||||||C004||C004A||C004M||C004D||C004E||||||||C005||C005A||C005M||C005D||C005E||||||||C006||C006A||C006M||C006D||C006E||||||||C007||C007A||C007M||C007D||C007E||||||||C008||C008A||C008M||C008D||C008E||||||||C018||C018A||C018M||C018D||C018E||||||||C009||C009M||C009D||C009E||||||||||C010||C010D||C010E||||||||||||C011||C011D||C011E||||||||||||C012||C012D||C012E||||||||||||C013||C013D||C013E||||||||||||C014||C014D||C014E||||||||||||C015||C015D||C015E||||||||||||C016||C016D||C016E||||||||||||C019||C019M||C019D||C019E||||||||||C017||C017M||C017E||||||||||||C020||||||||||||||||C021||||||||||||||||A009||A009A||A009M||A009D||A009E||||||||A010||A010A||A010M||A010D||A010E||||||||A011||A011A||A011M||A011D||A011E||||||||A012||A012A||A012M||A012D||A012E||||||||A030||A030A||A030M||A030D||A030E||||||||A015||A015A||A015M||A015D||A015E||||||||A016||A016A||A016M||A016D||A016E||||||||A017||A017A||A017M||A017D||A017E||||||||A040||A040A||A040M||A040D||A040E||||||||A013||A013A||A013M||A013D||A013E||||||||A014||A014A||A014M||A014D||A014E||||||||X001||X001A||X001M||X001D||X001E||||||||X002||X002A||X002M||X002D||X002E||||||||X003||X003A||X003M||X003D||X003E||||||||X004||X004A||X004M||X004D||X004E||||||||X005||X005A||X005M||X005D||X005E||||||||X006||X006A||X006D||X006E||||||||||X007||X007A||X007D||X007E||||||||||X008||X008A||X008M||X008D||X008E||||||||X009||||||||||||||||A050||A050A||A050M||A050D||A050E||||||||A060||A060A||A060M||A060D||A060E||||||||A070||A070A||A070M||A070D||A070E||||||||105||||||||||||||||106||106M||||||||||||||107||107E||||||||||||||108||108E||||||||||||||051||051M||051E||||||||||||052||052A||052M||052D||052E||||||||053||053A||053M||053D||053E||||||||054||054A||054M||054D||054E||||||||056||056A||056M||056D||056E||||||||057||057A||057M||057D||057E||||||||058||058A||058M||058D||058E||||||||059||059A||059M||059D||059E||||||||060||060A||060M||060D||060E||||||||061||061A||061M||061D||061E||||||||130||130A||130M||130D||130E||||||||131||131A||131M||131D||131E||||||||116||||||||||||||||117||117A||117M||117D||117E||||||||118||118D||||||||||||||119||119M||||||||||||||113||||||||||||||||114||||||||||||||||115||||||||||||||||075||||||||||||||||076||||||||||||||||077||||||||||||||||078||||||||||||||||079||||||||||||||||080||||||||||||||||081||||||||||||||||082||||||||||||||||083||||||||||||||||084||084M||||||||||||||085||085A||085M||085D||085E||||||||086||086C||086A||086M||086D||086E||||||087||087N||087A||087M||087D||087E||||||091||091A||091M||091D||091E||||||||088||088D||088E||||||||||||089||089M||||||||||||||099||099A||099M||099D||099E||||||||100||||||||||||||1087|1088|1089|1090|");
#endif
            var dsMenus = Sys_MenuRepository.SqlWithParams("select * from sys_menu order by SORT  asc,MENU_ID asc");

            return GetChildMenu(dsMenus.ToList(), 0, 0);
        }

        protected string GetChildMenu(List<sys_menu> dsMenus, int parentID, int level)
        {
            List<sys_menu> drMenus = dsMenus.FindAll(m => m.PARENT_ID == parentID);
            string strMenuList = string.Empty;
            string[] colorList = new string[] { "#4ccfe1", "#fdc006", "#ef6191", "#fe8562", "#90a5fe", "#a0887e", "#4ccfe1", "#fe8562", "#98d055", "#fdc006", "#fe8562", "#4ccfe1", "#fdc006", "#ef6191", "#fe8562", "#90a5fe", "#a0887e", "#4ccfe1", "#fe8562", "#98d055", "#fdc006", "#fe8562" };
            int counter = 0;

            foreach (sys_menu r in drMenus)
            {
                string strMenuSingle = string.Empty;
                string valueStr = r.MENU_CODE;

                if (level == 0)
                {
                    int menuID = r.MENU_ID;
                    string strChildMenus = GetChildMenu(dsMenus, menuID, 1);

                    strMenuSingle += "{";
                    strMenuSingle += "\"firstMenuId\": \"f" + r.MENU_ID.ToString() + "\",";
                    strMenuSingle += "\"firstMenuIcon\": \"" + r.IMAGE + "\",";
                    strMenuSingle += "\"firstMenuIconColor\": \"" + colorList[counter++] + "\",";//背景颜色的设定
                    strMenuSingle += "\"firstMenuTitle\": \"" + r.MENU_NAME + "\",";
                    strMenuSingle += "\"secondMenu\": " + strChildMenus;
                    if (strChildMenus.Length > 2)
                    {
                        strMenuSingle += ",\"thirdMenu\": " + strChildMenus;
                    }
                    strMenuSingle += "}";

                    if (string.IsNullOrEmpty(r.NAVIGATE_URL) == true)
                    {
                        if (strChildMenus.Length == 2)
                        {
                            strMenuSingle = string.Empty;
                        }
                    }
                    else
                    {
                        if (StringUtil.StrIFIn("|" + valueStr + "|", SessionUtil.GetSessionValue("QuanXian")) == false)
                        {
                            strMenuSingle = string.Empty;
                        }
                    }
                }
                else if (level == 1)
                {
                    int menuID = r.MENU_ID;
                    string strChildMenus = GetChildMenu(dsMenus, menuID, 2);

                    strMenuSingle += "{";
                    strMenuSingle += "\"secondMenuId\": \"f" + r.MENU_ID.ToString() + "\",";
                    strMenuSingle += "\"secondMenuItem\": \"" + r.MENU_NAME + "\",";
                    strMenuSingle += "\"secondMenuUrl\": \"" + r.NAVIGATE_URL + "\"";
                    if (strChildMenus.Length > 2)
                    {
                        strMenuSingle += ",\"thirdMenu\": " + strChildMenus;
                    }
                    strMenuSingle += "}";

                    if (string.IsNullOrEmpty(r.NAVIGATE_URL) == true)
                    {
                        if (strChildMenus.Length == 2)
                        {
                            strMenuSingle = string.Empty;
                        }
                    }
                    else
                    {
                        if (StringUtil.StrIFIn("|" + valueStr + "|", SessionUtil.GetSessionValue("QuanXian")) == false)
                        {
                            strMenuSingle = string.Empty;
                        }
                    }
                }
                else if (level == 2)
                {
                    int menuID = r.MENU_ID;

                    strMenuSingle += "{";
                    strMenuSingle += "\"thirdMenuId\": \"f" + r.MENU_ID.ToString() + "\",";
                    strMenuSingle += "\"thirdMenuUrl\": \"" + r.NAVIGATE_URL + "\",";
                    strMenuSingle += "\"thirdMenuItem\": \"" + r.MENU_NAME + "\"";
                    strMenuSingle += "}";

                    if (StringUtil.StrIFIn("|" + valueStr + "|", SessionUtil.GetSessionValue("QuanXian")) == false)
                    {
                        strMenuSingle = string.Empty;
                    }
                }

                if (string.IsNullOrEmpty(strMenuSingle) == false)
                {
                    strMenuList += (string.IsNullOrEmpty(strMenuList) == true ? "" : ",") + strMenuSingle;
                }
            }

            return "[" + strMenuList + "]";
        }

        public List<sys_menu> GetSys_Menus()
        {
            return Sys_MenuRepository.GetAllEnumerable().ToList();
        }
    }
}